perm filename NLF.SAI[SYS,HE]2 blob sn#012380 filedate 1972-11-13 generic text, type T, neo UTF8
00100	BEGIN "NLF"
00200	REQUIRE "PREAMB.sai[SYS,HE]" SOURCE_FILE;
00300	REQUIRE 200 STRING_SPACE;
00400	DEFINE CRLF="'15&'12";
00500	PRELOAD_WITH 0, 0, 0.4, 1.0;
00600	SAFE REAL ARRAY SL[1:4];
00610	SAFE REAL ARRAY NULL[1:4];
00700	PRELOAD_WITH 	 0.00000, -1.00000,  0.00000, 10.0,
00800			-1.00000,  0.00000,  0.00000, 25.0,	
00900			 0.00000,  0.00000, -1.00000,  1.0,
01000			 0.00000,  0.00000,  0.00000,  1.0;
01100	REAL ARRAY X1[1:4,1:4];
01200	PRELOAD_WITH 	 0.00000, -1.00000,  0.00000, 20.0,
01300			-1.00000,  0.00000,  0.00000, 25.0,
01400			 0.00000,  0.00000, -1.00000,  1.2,
01500			 0.00000,  0.00000,  0.00000,  1.0;
01600	REAL ARRAY X2[1:4,1:4];
01700	PRELOAD_WITH 	 0.00000, -1.00000,  0.00000, 30.0,
01800			-1.00000,  0.00000,  0.00000, 25.0,
01900			 0.00000,  0.00000, -1.00000,  0.9,
02000			 0.00000,  0.00000,  0.00000,  1.0;
02100	REAL ARRAY X3[1:4,1:4];
02200	PRELOAD_WITH 	-1.00000,  0.00000,  0.00000, 30.0,
02300			 0.00000,  1.00000,  0.00000, 25.0,
02400			 0.00000,  0.00000, -1.00000,  0.9,
02500			 0.00000,  0.00000,  0.00000,  1.0;
02600	REAL ARRAY SQAR[1:4,1:4];
02700	PRELOAD_WITH 0,0,0,1;
02800	REAL ARRAY ZERO[1:4];
02900	INTEGER I,M;
03000	BOOLEAN FIRST;
03100	STRING S;
03200	LABEL L1;
03300	SIMPLE PROCEDURE SORRY;
03400	BEGIN	OUTSTR("SORRY"&CRLF&CRLF);
03500		CALL(0,"EXIT");
03600	END;
03700	
03800	SIMPLE PROCEDURE MOVE_IT(REAL ARRAY A,B);
03900	BEGIN	INTEGER PLAN_SAV;
04000		A[3,4]←A[3,4]-1.00;
04100		B[3,4]←B[3,4]+1.0;
04200		ISSUE(5,"NLF","HAND",MESSAGE START_TRAJECTORY("HANOI",0));
04300		ISSUE(5,"NLF","HAND",MESSAGE OPEN_HAND(3));
04400		ISSUE(7,"NLF","HAND",MESSAGE MOVE_ARM(A,ARM_PLAN));
04500		IF ARM_PLAN THEN BEGIN
04600			ISSUE(5,"NLF","HAND",MESSAGE CLOSE_HAND(0.5));
04700			ISSUE(5,"NLF","HAND",MESSAGE MOVE_ARM(B,ARM_PLAN));
04800			ISSUE(5,"NLF","HAND",MESSAGE PLACE_ARM);
04900			ISSUE(7,"NLF","HAND",MESSAGE OPEN_HAND(3.0));
05000			IF (PLAN_SAV←ARM_PLAN) THEN BEGIN SQAR[1,4]←B[1,4];SQAR[2,4]←B[2,4];SQAR[3,4]←B[3,4]←B[3,4]-1;
05100			ISSUE(5,"NLF","HAND",MESSAGE ARM_CONO(SL,SL,NULL,0,0));
05200			ISSUE(5,"NLF","HAND",MESSAGE MOVE_ARM(SQAR,ARM_PLAN));
05300			ISSUE(5,"NLF","HAND",MESSAGE CLOSE_HAND(0.5));
05400			ISSUE(5,"NLF","HAND",MESSAGE OPEN_HAND(3.0));
05500			B[3,4]←B[3,4]+1;
05600			ISSUE(7,"NLF","HAND",MESSAGE CLOSE_TRAJECTORY);
05700		END;
05800		END;
05900		IF ¬PLAN_SAV  THEN BEGIN
06000			OUTSTR("I CANNOT REACH THE BLOCK AT "
06100			&"("&CVS(A[1,4])&","&CVS(A[2,4])&")"&CRLF&
06200			"PLEASE MOVE IT TO "
06300			&"("&CVS(B[1,4])&","&CVS(B[2,4])&") AND TYPE C/R"&CRLF&CRLF);
06400			INCHWL;
06500			OUTSTR("THANK YOU"&CRLF&CRLF);
06600		END ELSE BEGIN
06700			ISSUE(7,"NLF","HAND",MESSAGE DO_IT("HANOI"));
06800			IF ARM_STATUS THEN OUTSTR(CVOS(ARM_STATUS)&" SORRY, YOU WILL HAVE TO DO IT FOR ME"&CRLF);
06900		END;
07000	END;
07100	
07200	RECURSIVE PROCEDURE STACK(INTEGER H;REAL ARRAY A,B,C);
07300	BEGIN	IF H=1 THEN
07400		BEGIN	MOVE_IT(A,B);
07500			RETURN ;
07600		END;
07700		H←H-1;
07800		STACK(H,A,C,B);
07900		MOVE_IT(A,B);
08000		STACK(H,C,B,A);
08100	END;
     

00100	PUT_DATA(0,0,"NLF");
00200	WHILE ¬ YES_HAND DO CALL(1,"SLEEP");
00300	OUTSTR("DRIVE INITIALIZED"&CRLF&CRLF);
00500	DO BEGIN
00600	ISSUE(5,"NLF","HAND",MESSAGE START_TRAJECTORY ("H00000",0));
00700	ISSUE(5,"NLF","HAND",MESSAGE PARK_ARM);
00800	ISSUE(5,"NLF","HAND",MESSAGE OPEN_HAND(3));
00900	ISSUE(5,"NLF","HAND",MESSAGE CLOSE_TRAJECTORY);
00950	OUTSTR("STAND CLEAR OF THE ARM AND TYPE C/R
00975	");
00987	INCHWL;
01000	ISSUE(7,"NLF","HAND",MESSAGE DO_IT("H00000"));
01100	IF ARM_STATUS THEN BEGIN OUTSTR(CVOS(ARM_STATUS)&" PLEASE CHECK THE ARM & TYPE C/R"&'15&'12);
01200		INCHWL;
01300	END;
01400	END UNTIL ¬ARM_STATUS;
01500	OUTSTR("PLACE BLOCKS AT (10,25) AND TYPE THE HEIGHT"
01600	&CRLF&CRLF);
01700	SETFORMAT(0,1);
01800	X1[3,4]←0.8;
01900	X2[3,4]←0.8;
02000	X3[3,4]←0.8;
02100	S←INCHWL;
02200	I←INTSCAN(S,M);
02300	IF I<1 THEN BEGIN OUTSTR("WE CANNOT MOVE BELOW THE TABLE"&CRLF&CRLF);
02400		SORRY;END;
02500	M←2↑I-1;
02600	OUTSTR("THAT'S "&CVS(M)& " MOVES, KEEP YOUR FINGERS CROSSED"&CRLF&CRLF);
02700	SETFORMAT(-5,0);
02800	X1[3,4]←X1[3,4]+I;
02900	ISSUE(5,"NLF","HAND",MESSAGE START_TRAJECTORY ("H00000",0));
03000	ISSUE(5,"NLF","HAND",MESSAGE MOVE_ARM(X1,ARM_PLAN));
03100	ISSUE(5,"NLF","HAND",MESSAGE CLOSE_TRAJECTORY);
03200	ISSUE(7,"NLF","HAND",MESSAGE DO_IT("H00000"));
03300	IF ARM_STATUS THEN OUTSTR(CVOS(ARM_STATUS)&" PLEASE CHECK THE ARM & TYPE C/R"&'15&'12);
03400	OUTSTR("THIS IS WHERE THE ARM THINKS THE BLOCKS SHOULD BE
03500	TYPE C/R TO PROCEED
03600	");
03650	INCHWL;
03700	STACK(I,X1,X2,X3);
03800	M←ISSUE(5,"NLF","HAND",MESSAGE START_TRAJECTORY("HANOI",0));
03900	ISSUE(5,"NLF","HAND",MESSAGE PARK_ARM);
04000	ISSUE(7,"NLF","HAND",MESSAGE CLOSE_TRAJECTORY);
04100	ISSUE(7,"NLF","HAND",MESSAGE DO_IT("HANOI"));
04200	IF ARM_STATUS THEN OUTSTR("DID I HIT SOMEBODY!"&'15&'12) ELSE
04300	OUTSTR("IF THAT HAD BEEN 64 BLOCKS THE WORLD WOULD HAVE JUST ENDED!
04400	THANK YOU AND GOOD NIGHT."&CRLF&CRLF);
04500	END;